class Product { }  // 父类产品
class ProductA : Product { }  // 子类产品
class ProductB : Product { }  // 子类产品

abstract class Factory {  // 父类工厂
	public static Factory ChooseFactory(string factoryName) {  // 根据用户参数选择工厂
		switch (factoryName) {
			case "A": return new FactoryA();
			case "B": return new FactoryB();
			default: return null;
		}
	}
	public abstract Product GetProduct();  // 获取产品
}
class FactoryA : Factory {  // 子类工厂
	public override Product GetProduct() { return new ProductA(); }  // 获取具体子类产品
}
class FactoryB : Factory {  // 子类工厂
	public override Product GetProduct() { return new ProductB(); }  // 获取具体子类产品
}